Hibernate, Spring Boot ORM এর ডিফল্ট ইমপ্লিমেন্টেশন হিসেবে, Caching সিস্টেম ব্যবহার করে ডেটাবেস অপারেশনের পারফরম্যান্স উন্নত করে। Hibernate-এ দুটি স্তরের ক্যাশিং রয়েছে: First Level Cache এবং Second Level Cache। এগুলো ডেটাবেসে বারবার রিকোয়েস্ট পাঠানো থেকে বিরত রাখে এবং অ্যাপ্লিকেশনকে দ্রুততর করে।
First Level Cache
First Level Cache Hibernate-এর ডিফল্ট ক্যাশিং মেকানিজম এবং প্রতিটি Session-এর সাথে যুক্ত থাকে। এটি স্বয়ংক্রিয়ভাবে কাজ করে এবং ডেভেলপারের জন্য কোনো অতিরিক্ত কনফিগারেশন প্রয়োজন হয় না।
বৈশিষ্ট্য:
- সেশন নির্ভর: এটি শুধুমাত্র একটি Hibernate Session-এর মধ্যে কার্যকর থাকে।
- ডিফল্টভাবে সক্রিয়: আলাদাভাবে কনফিগার করার প্রয়োজন নেই।
- লিমিটেড স্কোপ: সেশন বন্ধ হওয়ার সাথে সাথে ক্যাশ মুছে যায়।
- অবজেক্ট ইডেন্টিটি গ্যারান্টি: একই সেশনের মধ্যে একই অবজেক্টের জন্য একাধিক কপি তৈরি হয় না।
উদাহরণ:
Session session = sessionFactory.openSession();
Product product1 = session.get(Product.class, 1L); // প্রথমবার ডেটাবেস থেকে ডেটা ফেচ করবে।
Product product2 = session.get(Product.class, 1L); // দ্বিতীয়বার ক্যাশ থেকে ডেটা ফেচ করবে।
session.close();
Second Level Cache
Second Level Cache সেশন-পরিসীমার বাইরে কাজ করে এবং SessionFactory-এর সাথে যুক্ত থাকে। এটি ক্যাশিংয়ের জন্য দীর্ঘমেয়াদি সমাধান এবং ডেটা বিভিন্ন সেশনের মধ্যে শেয়ার করতে পারে।
বৈশিষ্ট্য:
- SessionFactory নির্ভর: এটি সমস্ত সেশন জুড়ে কার্যকর থাকে।
- কনফিগারেশন প্রয়োজন: Second Level Cache সক্রিয় করতে আলাদাভাবে কনফিগার করতে হয়।
- পারফরম্যান্স উন্নত: ডেটাবেস থেকে পুনঃবার বার ডেটা রিট্রিভ করার প্রয়োজন কমায়।
- ক্যাশিং প্রোভাইডার: Hibernate Ehcache, Infinispan, OSCache ইত্যাদি ক্যাশিং প্রোভাইডার ব্যবহার করে।
উদাহরণ:
১. ডিপেনডেন্সি যোগ করা:
pom.xml-এ Hibernate Ehcache এর ডিপেনডেন্সি যোগ করুন।
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-ehcache</artifactId>
<version>5.6.7.Final</version>
</dependency>
২. Hibernate কনফিগারেশন:
application.properties ফাইলে Second Level Cache সক্রিয় করুন।
spring.jpa.properties.hibernate.cache.use_second_level_cache=true
spring.jpa.properties.hibernate.cache.region.factory_class=org.hibernate.cache.jcache.JCacheRegionFactory
spring.jpa.properties.javax.cache.provider=org.ehcache.jsr107.EhcacheCachingProvider
৩. Entity ক্লাসে ক্যাশিং এনোটেশন যোগ:
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import org.hibernate.annotations.Cache;
import org.hibernate.annotations.CacheConcurrencyStrategy;
@Entity
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class Product {
@Id
private Long id;
private String name;
private Double price;
// Getters and Setters
}
ব্যবহার:
Session session1 = sessionFactory.openSession();
Product product1 = session1.get(Product.class, 1L); // প্রথমবার ডেটাবেস থেকে ফেচ হবে।
session1.close();
Session session2 = sessionFactory.openSession();
Product product2 = session2.get(Product.class, 1L); // দ্বিতীয়বার Second Level Cache থেকে ফেচ হবে।
session2.close();
First Level এবং Second Level Cache এর পার্থক্য
| বৈশিষ্ট্য | First Level Cache | Second Level Cache |
|---|---|---|
| ক্যাশ স্কোপ | শুধুমাত্র একটি সেশনের মধ্যে সীমাবদ্ধ। | সমস্ত সেশন জুড়ে কার্যকর। |
| ডিফল্ট সক্রিয়তা | Hibernate-এ ডিফল্টভাবে সক্রিয়। | ডেভেলপারদের সক্রিয় করতে হয়। |
| অবস্থান | Session এর সাথে যুক্ত। | SessionFactory এর সাথে যুক্ত। |
| ডেটা শেয়ারিং | সেশনগুলোর মধ্যে ডেটা শেয়ার হয় না। | সমস্ত সেশন ডেটা শেয়ার করতে পারে। |
| কনফিগারেশন প্রয়োজন | কনফিগারেশন ছাড়াই কাজ করে। | ক্যাশিং প্রোভাইডার এবং সেটআপ প্রয়োজন। |
| ব্যবহার ক্ষেত্র | ছোট ডেটা স্টোরেজ বা ট্রানজিয়েন্ট ডেটার জন্য। | বড় ডেটা বা দীর্ঘমেয়াদি ক্যাশিংয়ের জন্য। |
সারাংশ
Hibernate-এর First Level Cache এবং Second Level Cache ডেটাবেস অপারেশনের কার্যকারিতা উন্নত করে। First Level Cache সেশনের মধ্যে ডেটা সংরক্ষণ করে দ্রুত অ্যাক্সেস নিশ্চিত করে, যেখানে Second Level Cache সেশনের বাইরের জন্য ডেটা ক্যাশ করে দীর্ঘমেয়াদি পারফরম্যান্স উন্নত করে। অ্যাপ্লিকেশনের প্রয়োজন অনুসারে এই দুই ক্যাশিং পদ্ধতির ব্যবহার নির্ধারণ করা উচিত।
Read more